/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import beans.EleitorBean;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import utilidades.ConnectionFactory;

/**
 *
 * @author marcio
 */

public class EleitorDAO implements Serializable {
    
   private Connection conn; 
    
   public EleitorDAO() {
       
      try {   
         this.conn = ConnectionFactory.getConnection();
      }
      catch(SQLException sqle) {
         System.out.println("Erro " + sqle.getMessage());
      }
      catch(Exception e) {
         System.out.println("Erro " + e.getMessage());
      }
   
   }
   
   public void salvar(EleitorBean eleitor) throws Exception {
       
      PreparedStatement ps = null;
      Connection connection =  null;
      if(eleitor == null)
         throw new Exception("O valor passado não pode se nulo");
      try {
         String SQL = "INSERT INTO eleitores (nome, sexo, nascimento, cpf, telefone_celular, titulo, zona, secao, bairro_id, candidato_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
         connection = this.conn;
         ps = connection.prepareStatement(SQL);
         ps.setString(1, eleitor.getNome());
         ps.setString(2, eleitor.getSexo());
         ps.setDate(3, new java.sql.Date(eleitor.getNascimento().getTime()));
         ps.setString(4, eleitor.getCpf());
         ps.setString(5, eleitor.getTelefone_celular());
         ps.setString(6, eleitor.getTitulo());
         ps.setInt(7, eleitor.getZona());
         ps.setInt(8, eleitor.getSecao());
         ps.setInt(9, eleitor.getBairro_id());
         ps.setInt(10, eleitor.getCandidato_id());
         ps.executeUpdate();
      }
      catch(SQLException sqle) {
         throw new Exception("Erro ao inserir dados " + sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(connection, ps);  
      }
   
   }
   
   public void editar(EleitorBean eleitor) throws Exception {
       
      PreparedStatement ps = null;
      Connection connection =  null;
      if(eleitor == null)
         throw new Exception("O valor passado não pode se nulo");
      
      try {
         String SQL = "UPDATE eleitores SET nome = ?, sexo = ?, nascimento = ?, cpf = ?, telefone_fixo = ?, telefone_celular = ?, titulo = ?, zona = ?, secao = ?, bairro_id = ?, candidato_id = ? WHERE id = " + eleitor.getId();
         connection = this.conn;
         ps = connection.prepareStatement(SQL);
         ps.setString(1, eleitor.getNome());
         ps.setString(2, eleitor.getSexo());
         ps.setDate(3, new java.sql.Date(eleitor.getNascimento().getTime()));
         ps.setString(4, eleitor.getCpf());
         ps.setString(5, eleitor.getTelefone_celular());
         ps.setString(6, eleitor.getTitulo());
         ps.setInt(7, eleitor.getZona());
         ps.setInt(8, eleitor.getSecao());
         ps.setInt(9, eleitor.getBairro_id());
         ps.setInt(10, eleitor.getCandidato_id());
         
         ps.execute();
      }
      catch(SQLException sqle) {
         throw new Exception("Erro ao editar dados " + sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(connection, ps);  
      }
   
   }
   
   public List getTodosContatos() throws Exception {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      
      try {
         connection = this.conn; 
         ps = connection.prepareStatement("SELECT * FROM eleitores");
         rs = ps.executeQuery();
         List<EleitorBean> lista = new ArrayList<EleitorBean>();
         while(rs.next()) {
            Integer id = rs.getInt("id");
            String nome = rs.getString("nome");
            String sexo = rs.getString("sexo");
            java.util.Date nascimento = rs.getDate("nascimento");
            String cpf = rs.getString("cpf");
            String telefoneCelular = rs.getString("telefone_celular");
            String titulo = rs.getString("titulo");
            Integer zona = rs.getInt("zona");
            Integer secao = rs.getInt("secao");
            Integer bairroId = rs.getInt("bairro_id");
            Integer candidatoId = rs.getInt("candidato_id");
            lista.add(new EleitorBean(id, nome, sexo, nascimento, cpf, telefoneCelular, titulo, zona, secao, bairroId, candidatoId));
         }
         return lista;
      }
      catch(SQLException sqle) {
         throw new Exception(sqle);    
      }
      finally {
         ConnectionFactory.closeConnection(conn, ps, rs);
      }
       
   }
   
   public EleitorBean getEleitorEspecifico(String query) {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      EleitorBean eb = null;
      
      try {
         connection = this.conn;
         ps = connection.prepareStatement("SELECT * FROM eleitores WHERE nome = ?");
         ps.setString(1, query);
         rs = ps.executeQuery();
         while(rs.next()) {
         Integer id = rs.getInt("id");
            String nome = rs.getString("nome");
            String sexo = rs.getString("sexo");
            java.util.Date nascimento = rs.getDate("nascimento");
            String cpf = rs.getString("cpf");
            String telefoneCelular = rs.getString("telefone_celular");
            String titulo = rs.getString("titulo");
            Integer zona = rs.getInt("zona");
            Integer secao = rs.getInt("secao");
            Integer bairroId = rs.getInt("bairro_id");
            Integer candidatoId = rs.getInt("candidato_id");
            eb = new EleitorBean(id, nome, sexo, nascimento, cpf, telefoneCelular, titulo, zona, secao, bairroId, candidatoId);   
         }
         return eb;
      }
      catch(SQLException sqle) {
         System.out.println(sqle);    
      }
      catch(Exception e) {
         System.out.println(e);
      }
      finally {
         try { 
            ConnectionFactory.closeConnection(conn, ps, rs);
         }
         catch(Exception e) {
            System.out.println(e);
         }
      }
      return eb;
       
   }
   
   public void excluirEleitor(EleitorBean eleitor) {
       
      PreparedStatement ps = null;
      Connection connection;
                  
      try {
         connection = this.conn;
         ps = connection.prepareStatement("DELETE FROM eleitores WHERE nome = ?");
         ps.setString(1, eleitor.getNome());
         int i = ps.executeUpdate();
         System.out.println(i);
      }
      catch(SQLException sqle) {
         System.out.println(sqle);    
      }
      catch(Exception e) {
         System.out.println(e);
      }
      finally {
         try { 
            ConnectionFactory.closeConnection(conn, ps);
         }
         catch(Exception e) {
            System.out.println(e);
         }
      }
             
   }
   
   public Integer getVotoEspecifico(String query) {
       
      PreparedStatement ps = null;
      Connection connection;
      ResultSet rs = null;
      Integer total = null;
      
      try {
         connection = this.conn;
         ps = connection.prepareStatement("SELECT COUNT(eleitores.id) AS total FROM eleitores INNER JOIN candidatos WHERE eleitores.candidato_id = candidatos.id AND candidatos.nome = ?");
         ps.setString(1, query);
         rs = ps.executeQuery();
         while(rs.next()) {
            total = rs.getInt("total");
         }
         return total;
      }
      catch(SQLException sqle) {
         System.out.println(sqle);    
      }
      catch(Exception e) {
         System.out.println(e);
      }
      finally {
         try { 
            ConnectionFactory.closeConnection(conn, ps, rs);
         }
         catch(Exception e) {
            System.out.println(e);
         }
      }
      return total;
       
   }

}